/*******************************************************************************
  * 文件：Buzzer.h
  * 作者：zyz
  * 版本：v2.0.1
  * 日期：2020-07-16
  * 说明：蜂鸣器
*******************************************************************************/
#ifndef __BUZZER_H
#define __BUZZER_H

/* 头文件 *********************************************************************/
#include "Macro.h"
#include "Constant.h"
#include "Typedefine.h"
#include "Hardware_IO.h"

/* 宏定义 *********************************************************************/
#define U8_BUZZER_VOLUME_LOW_DUTY       ((U8) 10)
#define U8_BUZZER_VOLUME_MED_DUTY       ((U8) 20)
#define U8_BUZZER_VOLUME_HIGH_DUTY      ((U8) 50)

/* 类型定义 *******************************************************************/

// 声音
typedef enum
{
    eBUZZER_SOUND_WELCOM,                // WELCOM SOUND
    eBUZZER_SOUND_KEY_PRESS,             // KEY PRESS SOUND
    eBUZZER_SOUND_ACTION_NOT_ALLOWED,    // ACTION NOT ALLOWED SOUND
    eBUZZER_SOUND_LOCK,                  // KEY LOCK SOUND
    eBUZZER_SOUND_SLIDER_PRESS,          // SLIDER PRESS SOUND
    eBUZZER_SOUND_PAUSE_ON,              // PAUSE ON SOUND
    eBUZZER_SOUND_SPILLAGE_WARN,         // SPILLAGE WARNING SOUND
    eBUZZER_SOUND_DOUBLE_GLOBAL_TIMER_END,// DOUBLE GLOBAL TIMER END SOUND
    eBUZZER_SOUND_GOODBEY,               // GOODBEY SOUND
    eBUZZER_SOUND_START_COOKING,         // START COOKING SOUND
    eBUZZER_SOUND_COOKING_END,           // COOKING END SOUND
    eBUZZER_SOUND_UNLOCK,                // KEY UNLOCK SOUND
    eBUZZER_SOUND_PAUSE_OFF,             // PAUSE OFF SOUND
    eBUZZER_SOUND_SPILLAGE_ALARM,        // SPILLAGE ALARM SOUND
    eBUZZER_SOUND_SUM,                   // 总数
}BuzzerSound_te;

// 音量
typedef enum
{
    eBUZZER_VOL_LOW,
    eBUZZER_VOL_MED,
    eBUZZER_VOL_HIGH,
}BuzzerVolume_te;

// 音调
typedef struct
{
    U16 u16Frequency;       // 频率
    U16 u16OnTime;          // 开启时间，Buzzer电源开启，PWM输出
    U16 u16FadeTime;        // 衰减时间，Buzzer电源关闭，PWM输出
    U16 u16OffTime;         // 关闭时间，Buzzer电源关闭，PWM关闭
}BuzzerTone_ts;

// 声音
typedef struct
{
    BuzzerTone_ts *psTone;    // 音调
    U16 u16ToneNum;           // 个数
}BuzzerSound_ts;

// 蜂鸣器控制
typedef struct
{
    Bool bSounding;                             // 发声标志
    BuzzerSound_te eSound;                      // 声音
    BuzzerVolume_te eVolume;                    // 音量
    U16 u16ToneIndex;                           // 音调索引
    U16 u16TimeCount;                           // 时间计数
    void (*pfEnablePower)(Bool bPower);         // 使能供电
    void (*pfEnableDriver)(Bool bDriver);       // 使能PWM
    void (*pfSetPWM)(U16 u16Freq,U8 u8Duty);    // 设置PWM
}BuzzerControl_ts;

/* 变量声明 *******************************************************************/
/* 函数声明 *******************************************************************/
void Buzzer_Init(void);                                             // 初始化
void Buzzer_Play(BuzzerSound_te eSound,BuzzerVolume_te eVol);       // 发声
void Buzzer_TimingHandler(void);                                    // 定时处理

#endif /* __BUZZER_H */

/***************************** 文件结束 ***************************************/
